/**
 * TDS PEC 4
 * Grupo 3H2M 
 *
 * El paquete <code>edu.uoc.tds.pec4.rmi</code> contiene los interfaces
 * usados tanto por el servidor como por la aplicación cliente.
 */
package edu.uoc.tds.pec4.rmi;

import edu.uoc.tds.pec4.beans.AulaDTO;
import edu.uoc.tds.pec4.beans.LocalizacionDTO;
import edu.uoc.tds.pec4.beans.ReservaDTO;
import edu.uoc.tds.pec4.beans.SolicitudDTO;
import edu.uoc.tds.pec4.common.filters.FiltroFechasHoras;
import edu.uoc.tds.pec4.server.bbdd.exceptions.GestorAulasException;
import java.rmi.Remote;
import java.rmi.RemoteException; 
import java.util.List;

/**
 * La interfaz <code>GestorAulasInterface</code> especifica los métodos que se pueden
 * invocar de forma remota para el subsistema Aulas
 *
 * @author	Luis Rodríguez-Manzaneque Sánchez
 * @version	25/11/2011
 * @since	1.00
 */
public interface GestorAulasInterface extends Remote {

    /**
     * @return La lista de las solicitudes
     * @throws RemoteException
     * @throws GestorAulasException
     */
    public List<SolicitudDTO> listaSolicitudes() throws RemoteException,
            GestorAulasException;

    /**
     * Obtiene un listado de la base de datos con todas las solicitudes que cumplen
     * con los filtros establecidos.
     * @param pais      El país por el que se quiere filtrar
     * @param provincia La provincia por la que se quiere filtrar
     * @param ciudad    La ciudad por la que se quiere filtrar
     * @param tiposSol  Un array con la lista de tipos de solicitudes elegidas
     * @param estados   Un array con la lista de los estados de la solicitud
     * @return La lista de las solicitudes filtradas por localización, tipos
     * y/o estados
     * @throws RemoteException
     * @throws GestorAulasException
     */
    public List<SolicitudDTO> listaSolicitudes(LocalizacionDTO local, 
            List<Integer> tiposSol, List<Integer> estados) throws RemoteException,
            GestorAulasException;

    /**
     * Obtiene la solicitud de la que se envía por parámetro su identificador
     * @param idSolicitud      El identificador de solicitud
     * @return La solicitud de la que se quieren obtener todos sus datos
     * @throws RemoteException
     * @throws GestorAulasException
     */
    public SolicitudDTO getSolicitud(int idSolicitud) throws RemoteException,
            GestorAulasException;
    
    /**
     * Devuelve la lista de Solicitudes que existen actualmente.
     * @return  La lista de todos los Solicitudes de la aplicación
     * @throws RemoteException
     * @throws GestorAulasException
     */
    public List<AulaDTO> listaAulasLibres(int idCiudad, FiltroFechasHoras fechasHoras) 
            throws RemoteException,GestorAulasException;    
    
    /**
     * Método que permite dar de alta la reserva de un espacio.
     * @param   reserva La reserva a dar de alta en la BBDD
     * @throws  RemoteException
     * @throws  GestorAulasException
     */
    public void insertarReserva(ReservaDTO reserva) throws RemoteException,
            GestorAulasException;
    
    public void actualizarReserva(ReservaDTO reserva) throws RemoteException,
            GestorAulasException;
    
    public void insertarSolicitud(SolicitudDTO solicitud) throws RemoteException,
            GestorAulasException;
    
    public ReservaDTO getReserva (int idReserva)throws RemoteException,
            GestorAulasException;
    
    public ReservaDTO getDetalleReserva (int idReserva)throws RemoteException,
            GestorAulasException;
    
     public List<ReservaDTO> listaReservas() throws RemoteException,
            GestorAulasException;
     
     public List<ReservaDTO> listaReservas(LocalizacionDTO local, 
            List<Integer> estados,String FechaDesde, String FechaHasta) throws RemoteException,
            GestorAulasException;
     public List<AulaDTO> listaAulas(LocalizacionDTO local, 
            List<Integer> estados,String fechaDesde, String fechaHasta) throws RemoteException,
            GestorAulasException;

}
